#include "localizador.h"
#include <fstream>
using namespace std;


int Localizador::getPosicionObjetivo(Matriz posicionImpacto, Matriz matrizEnemigo, Matriz& posicionObjetivo){
    //fstream arch("laMatriz.txt",ios::out | ios::app);
    //arch<<matrizEnemigo<<endl<<endl;
    //arch<<posicionImpacto<<endl;
	vector<int> arrSwap(posicionImpacto.cantidadDeFilas());
	double coef;
	cout<<matrizEnemigo<<endl;
	Indice i, j, k, filaMax, columnaMax, fin;
	int solUnica= 0;
	//Eliminacion Gaussiana con pivoteo total
	fin=matrizEnemigo.cantidadDeColumnas();
	for(k=1;k<=fin; k++){
		matrizEnemigo.getPosicionMaxElementoSubmatriz(k,filaMax,columnaMax);

		//matrizEnemigo.swapColumna(k,columnaMax);
		//matrizEnemigo.swapFila(k,filaMax);
		//posicionImpacto.swapFila(k,filaMax);
		arrSwap[k-1]= filaMax;

		if (matrizEnemigo.get(k,k) !=0){
			for(i=k+1;i<=matrizEnemigo.cantidadDeFilas();i++){
				coef= matrizEnemigo.get(i,k) / matrizEnemigo.get(k,k);
				matrizEnemigo.set(i,k,0);
				for(j=k+1;j<=matrizEnemigo.cantidadDeColumnas();j++)
					matrizEnemigo.set(i,j,matrizEnemigo.get(i,j) - matrizEnemigo.get(k,j)*coef);
				posicionImpacto.set(i,1,posicionImpacto.get(i,1) - posicionImpacto.get(k,1)*coef);
			}
		}
		else
			solUnica= 1;
	}

	//Solucion
	for(k=matrizEnemigo.cantidadDeFilas(); k>0; k--){
		posicionObjetivo.set(k,1,posicionImpacto.get(k,1));
		for(i=k+1; i<=matrizEnemigo.cantidadDeColumnas(); i++)
			posicionObjetivo.set(k,1, posicionObjetivo.get(k,1) - (matrizEnemigo.get(k,i)*posicionObjetivo.get(i,1)));
		if (matrizEnemigo.get(k,k)==0)
			posicionObjetivo.set(k,1,posicionObjetivo.get(k,1));
		else
			posicionObjetivo.set(k,1,posicionObjetivo.get(k,1)/matrizEnemigo.get(k,k));
	}

	//revierte las filas intercambiadas
	//for (i=arrSwap.size();i>=1 ; i--)
	//	posicionObjetivo.swapFila(i,arrSwap[i-1]);

	return solUnica;
}
